package com.zh.note.leetcode.dp;

/**
 * 746. 使用最小花费爬楼梯
 * <p>
 * dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
 */
public class LC_746_minCostClimbingStairs {

    // public int minCostClimbingStairs(int[] cost) {
    //     int len = cost.length;
    //     int[] dp = new int[len + 1];
    //     // 从下标为 0 或下标为 1 的台阶开始，因此支付费用为0
    //     dp[0] = 0;
    //     dp[1] = 0;
    //     // 计算到达每一层台阶的最小费用
    //     for (int i = 2; i <= len; i++) {
    //         dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
    //
    //     }
    //     return dp[len];
    // }

    public int minCostClimbingStairs(int[] cost) {
        int len = cost.length;
        int[] dp = new int[2];
        // 从下标为 0 或下标为 1 的台阶开始，因此支付费用为0
        dp[0] = 0;
        dp[1] = 0;
        // 计算到达每一层台阶的最小费用
        for (int i = 2; i <= len; i++) {
            int sum = Math.min(dp[1] + cost[i - 1], dp[0] + cost[i - 2]);
            dp[0] = dp[1];
            dp[1] = sum;

        }
        return dp[1];
    }
}
